import pymysql
import pandas as pd


class Mysql_csv(object):

    # 定义一个init方法，用于读取数据库
    def __init__(self):
        # 读取数据库和建立游标对象
        self.connect = pymysql.connect(host="127.0.0.1", \
                                       port=3306, user="root", password="12345", \
                                       database="superset", charset="utf8")
        self.cursor = self.connect.cursor()

    # 定义一个del类，用于运行完所有程序以后关闭数据源和游标对象
    def __del__(self):
        self.connect.close()
        self.cursor.close()

    # 读取csv文件的列索引，用来建立数据表的字段
    def read_csv_colnmns(self,csv_name):
        # 读取csv文件的索引
        # csv_name='E:\\电网数据\\新能源\\2017山西.csv'
        self.csv_name =csv_name
        with open(self.csv_name, 'r', encoding='utf-8') as f:
            lt = f.readlines()
            print(lt[0])
            print(type(lt[0]))
            l = lt[0].split(',')
            print(l)
            lenl = len(l) - 1
            del l[lenl]
            print(lenl)
            print(l)

        data = pd.read_csv(self.csv_name, encoding="utf-8")
        #['序号', '数据处理地', '行业代码', '期别年', '期别月', '单位详细名称', '组织机构代码', '本期营业收入千元', '上年同期营业收入千元', '营业收入增速1']

        data=data[l]
        data_list = data.values
        print(data_list)
        return data_list

    # 往数据库写入数据
    def write_mysql(self):
        # 在数据表中写入数据，因为数据是列表类型，把他转化为元组更符合sql语句
        for i in self.read_csv_colnmns(self.csv_name):
            data = tuple(i)
            '''
            li=list(data)
            print(li)
            print('#'*30)
            i=li.index(r' nan')
            print(i)
            del li[li.index(' nan')]
            print(li)'''
            print(data)
            sql = "insert into {} values{}".format(self.sheet,data)
            self.cursor.execute(sql)
            self.commit()
        print("\n数据写入完成")

    # 定义一个确认事务运行的方法
    def commit(self):
        self.connect.commit()

    # 新建数据库表
    def create(self,csv_name,sheet):
        # 若已有数据库表shanxi，则删除
        self.sheet=sheet
        self.csv_name=csv_name
        query = "drop table if exists {}".format(sheet)  # 更改表名
        self.cursor.execute(query)
        # 创建数据表，用刚才提取的列索引作为字段
        data_2 = self.read_csv_colnmns(self.csv_name)
        with open(self.csv_name, 'r', encoding='utf-8') as f:
            lt = f.readlines()
            print(lt[0])
            #str=lt[0].replace('\n','')
            str=lt[0].replace(',',' varchar(50) not null,')
            #str=str+' varchar(50) not null'
            str=str[:-2]
            print(str)
        # 根据自己要创建的表格更改sql语句
        sql = "create table if not exists {}({})default charset=utf8;".format(sheet,str)
        self.cursor.execute(sql)
        self.commit()

    # 运行程序
    def run(self,filename):
        self.create(fr'datanew\{filename}.csv',fr'{filename}')
        self.write_mysql()


# 封装函数
# def main():
#     sql = Mysql_csv()
#     sql.run('当月营收2021年9月')
#
#
# if __name__ == '__main__':
#     main()

'''str=数据处理地 varchar(50) not null,行业代码 varchar(50) not null,期别年 varchar(50) not null,期别月 varchar(50) not null,
              单位详细名称 varchar(50) not null,组织机构代码 varchar(50) not null,本期 varchar(50) not null,上期 varchar(50) not null,
              增速 varchar(50) not null'''
#数据处理地 varchar(50) not null,行业代码 varchar(50) not null,期别年 varchar(50) not null,期别月 varchar(50) not null,单位详细名称 varchar(50) not null,组织机构代码 varchar(50) not null,本期 varchar(50) not null,上期 varchar(50) not null,增速 varchar(50) not null
#数据处理地 varchar(50) not null,行业代码 varchar(50) not null,期别年 varchar(50) not null,期别月 varchar(50) not null,单位详细名称 varchar(50) not null,组织机构代码 varchar(50) not null,本期 varchar(50) not null,上期 varchar(50) not null,增速 varchar(50) not null
